home *** CD-ROM | disk | FTP | other *** search
Wrap
(*************************************************** Ant Movie Catalog importation script www.antp.be/software/moviecatalog/ [Infos] Authors=Thierry Colier Title=CDiscount Description=CDiscount (FR) Descriptif et image Site=http://www.cdiscount.com Language=FR Version= Requires=3.5.0 Comments= License=This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. | GetInfo=1 [Options] ***************************************************) program CDISCOUNT_FR; var MovieName: string; function FindLine(Pattern: string; List: TStringList; StartAt: Integer): Integer; var i: Integer; begin result := -1; if StartAt < 0 then StartAt := 0; for i := StartAt to List.Count-1 do if Pos(Pattern, List.GetString(i)) <> 0 then begin result := i; Break; end; end; procedure RecupereGrandeImage (Adr : String); var Page : TStringList; Line, Value : string; LineNr: Integer; BeginPos : Integer; begin HTMLDecode(Adr); Page := TStringList.Create; Page.Text := GetPage('http://www.cdiscount.com/newmag/mag_dvd/' + Adr); LineNr := FindLine('<img border="0" src="', Page, 0); if LineNR > -1 then begin Line := Page.GetString(LineNr); BeginPos := pos ('<img border="0" src="', Line); Delete(Line, 1, BeginPos+20); BeginPos := pos ('"></a>', Line); value := copy (Line, 1, BeginPos - 1); GetPicture(value); end; end; procedure AnalyzeMoviePage(Page: TStringList); var Line, Value, Value2 : string; LineNr: Integer; BeginPos, EndPos, valeur : Integer; begin // Image LineNr := FindLine('zoom_fiche.asp?rep=', Page, 0); // on rΘcupΦre la grande image s'il y en a une if LineNR > -1 then begin Line := Page.GetString(LineNr); BeginPos := pos ('zoom_fiche.asp?rep=', Line); Delete(Line, 1, BeginPos-1); BeginPos := pos (',530,400,', Line); value := copy (Line, 1, BeginPos - 10); RecupereGrandeImage(Value); end else begin LineNr := FindLine('"#000000"><IMG border="0" src="', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := pos ('"#000000"><IMG border="0" src="', Line); Delete(Line, 1, BeginPos + 30); BeginPos := pos ('"></TD></TR></TABLE>', Line); value := copy (Line, 1, BeginPos - 1); GetPicture(value); end; end; // Description LineNr := FindLine('histoire</TD><TD', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := pos('histoire</TD><TD', Line); Delete (Line, 1, BeginPos+51); EndPos := pos('</TD></TR></TABLE>', Line); Value := copy (Line, 1, EndPos); value := StringReplace (Value, '<br>', #13#10); HTMLRemoveTags(Value); HTMLDecode(Value); Delete(Line, 1, EndPos); SetField(fieldDescription, Value); end; // Titre LineNr := FindLine('>Titre</TD><TD', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := pos('>Titre</TD><TD', Line); Delete (Line, 1, BeginPos+49); EndPos := pos('</TD></TR>', Line); Value := copy(Line, 1, EndPos-1); Value := AnsiUpFirstLetter(AnsiLowerCase(trim(Value))); SetField(fieldTranslatedTitle, Value); end; // Acteurs LineNr := FindLine('>Acteurs</TD>', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := Pos('>Acteurs</TD>', Line); Delete (Line, 1, BeginPos+51); EndPos := pos('</TD></TR>', Line); Value := copy(Line, 1, EndPos-1); SetField(fieldActors, Value); end; // RΘalisateur LineNr := FindLine('>RΘalisateur</TD>', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := Pos('>RΘalisateur</TD>', Line); Delete (Line, 1, BeginPos+55); EndPos := pos('</TD></TR>', Line); Value := copy(Line, 1, EndPos-1); SetField(fieldDirector, Value); end; //DurΘe : format 2 h 20 ou 1h55 min ... LineNr := FindLine('>DurΘe</DIV>', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := Pos('>DurΘe</DIV>', Line); Delete (Line, 1, BeginPos+55); EndPos := pos('</TD></TR>', Line); Value := copy(Line, 1, EndPos-1); BeginPos := pos('h', value); if (BeginPos > 0) then begin value := StringReplace (Value, 'min', #32); value := StringReplace (Value, 'mn', #32); value2 := copy(Value, 1, BeginPos-1); valeur := StrToInt(trim(value2), 10)*60; value2 := copy(value, BeginPos+1, 10); valeur := valeur + StrToInt(trim(value2), 10); value := IntToStr(valeur); end; SetField(fieldLength, Value); end; //Format Audio LineNr := FindLine('>Le son</DIV>', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := Pos('>Le son</DIV>', Line); Delete (Line, 1, BeginPos+56); EndPos := pos('</TD></TR>', Line); Value := copy(Line, 1, EndPos-1); SetField(fieldAudioFormat, Value); end; //Sous-Titres LineNr := FindLine('>Les sous-titres</DIV>', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := Pos('>Les sous-titres</DIV>', Line); Delete (Line, 1, BeginPos+65); EndPos := pos('</TD></TR>', Line); Value := copy(Line, 1, EndPos-1); SetField(fieldSubtitles, Value); end; //Zone LineNr := FindLine('>Code rΘgional</DIV>', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := Pos('>Code rΘgional</DIV>', Line); Delete (Line, 1, BeginPos+63); EndPos := pos('</TD></TR>', Line); Value := copy(Line, 1, EndPos-1); SetField(fieldVideoFormat, Value); //α dΘcortiquer end; //Langues LineNr := FindLine('>Choix de langues</DIV>', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := Pos('>Choix de langues</DIV>', Line); Delete (Line, 1, BeginPos+66); EndPos := pos('</TD></TR>', Line); Value := copy(Line, 1, EndPos-1); SetField(fieldLanguages, Value); end; //RΘsolution LineNr := FindLine('>Format image</DIV>', Page, 0); if LineNr > -1 then begin Line := Page.GetString(LineNr); BeginPos := Pos('>Format image</DIV>', Line); Delete (Line, 1, BeginPos+62); EndPos := pos('</TD></TR>', Line); Value := copy(Line, 1, EndPos-1); SetField(fieldResolution, Value); end; //Bonus LineNr := FindLine('>BONUS</DIV></TD>', Page, 0); if LineNr > -1 then begin Value := 'Bonus :'+#13#10; Line := Page.GetString(LineNr); BeginPos := Pos('>BONUS</DIV></TD>', Line); Delete (Line, 1, BeginPos+55); EndPos := pos('</TD></TR>', Line); Value := value + copy(Line, 1, EndPos-1); value := StringReplace (Value, '<br>', #13#10); SetField(fieldComments, Value); end; //DisplayResults; end; procedure AddMoviesTitles(Page: TStringList; var LineNr: Integer); var Line: string; MovieTitle, MovieAddress: string; StartPos: Integer; EndPos: Integer; LastLine: Integer; begin repeat Line := Page.GetString(LineNr); StartPos := pos('bgcolor="#c50000"><A target="fich_prod"', Line); if StartPos > 0 then begin StartPos := pos('href="http://www.cdiscount.com', Line); EndPos := pos('navid=104">', Line); MovieAddress := copy(Line, StartPos+6, EndPos-StartPos+3); Delete(Line, 1, EndPos+10); EndPos := Pos ('</A></TD>', Line); MovieTitle := copy(Line, 1, EndPos-1); HTMLDecode(MovieAddress); HTMLDecode(Movietitle); PickTreeAdd(MovieTitle, MovieAddress); end; LineNr := LineNr + 1; until (LineNR > Page.count) { if (pos('« Page précédente</a>', Line) > 0) then begin StartPos := pos('<a href="', Line); EndPos := pos('" class="roll">« Page', Line); PickTreeAdd('... << RΘsultats prΘcΘdents', 'http://www.alapage.com' + copy (Line, StartPos+9, Endpos-StartPos-9)); end; if (pos('Page suivante »</DIV>', Line) > 0) then begin StartPos := pos('| <A href="', Line); EndPos := pos('" class="roll">Page suivante ', Line); PickTreeAdd('RΘsultats suivants >> ...', 'http://www.alapage.com' + copy (Line, StartPos+22, Endpos-StartPos-22)); end;} end; procedure AnalyzePage(Address: string); var Page: TStringList; LineNr: Integer; Line : String; StartPos, EndPos : integer; Adr : String; begin Page := TStringList.Create; Page.Text := GetPage(Address); PickTreeClear; LineNr := 0; LineNr := FindLine('rΘsultats correspondent<BR>', Page, LineNr); // trouvΘ plusieurs rΘponses if LineNr > -1 then begin Line := Page.GetString(LineNr); StartPos := pos ('"center"><B>', Line); EndPos := pos(' rΘsultats correspondent<BR>', Line); PickTreeAdd(copy (Line, StartPos+12, EndPos-StartPos-12)+' Films TrouvΘs pour ' + MovieName + ' :', ''); AddMoviesTitles(Page, LineNr); if PickTreeExec(Address) then AnalyzePage(Address); end else if (pos('1 rΘsultat correspond', Page.Text) > 0) then begin LineNr := FindLine('1 rΘsultat correspond', Page, LineNr); // trouvΘ 1 rΘponse Line := Page.GetString(LineNr); StartPos := pos('bgcolor="#c50000"><A target="fich_prod"', Line); if StartPos > 0 then begin StartPos := pos('href="http://www.cdiscount.com', Line); EndPos := pos('navid=104">', Line); Adr := copy(Line, StartPos+6, EndPos-StartPos+3); HTMLDecode(Adr); AnalyzePage(Adr); end; end else begin if ( pos('fiche/fiche_produit.gif"', Page.Text) > 0) then begin SetField(fieldURL, Address); AnalyzeMoviePage(Page) end; end; Page.Free; end; begin if CheckVersion(3,5,0) then begin MovieName := GetField(fieldTranslatedTitle); if MovieName = '' then MovieName := GetField(fieldOriginalTitle); if Input('CDiscount.com Import', 'Entrer le titre du film :', MovieName) then begin AnalyzePage('http://www.cdiscount.com/newmag/mag_dvd/list_prod_resultat_sinequa.asp?p_StrSearch='+UrlEncode(MovieName)+'&mscssid=031016203459XQGJXIBLJFBWVWL13346&refer=&REFERER_SURFEUR=&keyid=33203623'); end; end else ShowMessage('Ce script requiert une version plus rΘcente de Ant Movie Catalog (au moins la version 3.5.0)'); end.